.. _cmcMxIsDone:

cmcMxIsDone
================================
--------------------------------


SYNOPSYS
`````````````
.. code-block:: none

  VT_I4 cmcMxIsDone ([in] VT_I4 BoardID, [in] VT_I4 NumAxes, [in] VT_PI4 NumChannel, [out] VT_PI4 IsDone)

DESCRIPTION
`````````````  

- 여러 개의 축에 대하여 지정한 모든 축의 모션이 완료됐는지를 확인(確認)합니다. 이 함수는 
  다축제어뿐 아니라 원점복귀나 단축모션제어 작업시에도 활용할 수 있습니다. 
 
\

- 이 함수의 사용과 호출에 있어, 제공된 ㈜커미조아의 함수 헤더 Visual Basic 에서는 함수의
  첨두어 cmc 가 붙지 않습니다.

PARAMETER
`````````````

▶ BoardID : 사용자가 설정한 디바이스(보드) ID. 
 
▶ NumAxes : 동시에 작업을 수행할 대상 축의 수 
 
▶ NumChannel : 작업완료를 확인(確認)할 대상 축의 배열 주소값. 이 배열의 크기는 
NumAxes값과 일치하거나 커야 합니다. 
 
▶ IsDone : 다축구동 완료 여부를 판단할 수 있는 매개변수 입니다. 

  .. csv-table::
   :widths: 10 90
   :header-rows: 1
   :stub-columns: 0

    Value, Meaning
    cmcFALSE, 모션작업이 완료되지 않음 
    cmcTRUE, 모션작업이 완료됨 
                

RETURN VALUE
`````````````

+------------+-----------+
|    Value   | Meaning   |
+============+===========+
|    음수    | 수행 실패 |
+------------+-----------+
| ERR_NONE   | 수행 성공 |
+------------+-----------+

EXAMPLE
`````````

.. code-block:: c++
 :linenos:
 :emphasize-lines: 5

  C/C++ 
  long nIsDone; 
  long BoardID = 0; 
  long nNumChannel[2] = {0, cmY1}; 
  double fDistList[2] = {1000, 1000}; 
  if(cmcMxMove(BoardID, 2, nNumChannel, fDistList, cmcFALSE) != ERR_NONE){ 
  //Handle 은 사용자가 생성한 폼의 핸들 값입니다. 
  // 에러메시지 출력 
  return; 
  } 
  while (1){ 
  cmcMxIsDone(BoardID, 2, nNumChannel, &nIsDone);  
  if(nIsDone == cmcTRUE) break; 
  else{ 
  // 다축 모션이 종료되지 않은 경우입니다. 적절한 처리를 합니다. 
  } 
  } 

.. code-block:: c++
 :linenos:

  Visual Basic 
  Dim BoardID As Long 
  Dim nNumChannel(2) As Long 
  Dim fDistList(2) As Double 
  BoardID = 0 
  „ 대상 축 설정 
  nNumChannel(0) = 0 
  nNumChannel(1) = cmY1 
  „ 대상 축에 대한 이송 거리 설정 
  fDistList(0) = 1000 
  fDistList(1) = 1000 
  If(MxMove(BoardID, 2, nNumChannel(0), fDistList(0), cmcFALSE) <> ERR_NONE) Then 
  // 에러메시지 출력 
  Exit Sub 
  End If 
  While(MxIsDone(BoardID, 2, nNumChannel(0), cmcTRUE) <> ERR_NONE) Then 
  // 에러메시지 출력 
  Exit Sub; 
  End If 

.. code-block:: c++
 :linenos:

  Delphi 
  BoardID := 0; 
  // 대상 축 설정 
  nNumChannel[0] := 0; 
  nNumChannel[1] := cmY1; 
  // 대상 축에 대한 이송 거리 설정 
  fDistList[0] := 1000; 
  fDistList[1] := 1000; 
  if(cmcMxMove(BoardID, 2, @nNumChannel, @fDistList) <> ERR_NONE) then begin 
  // 에러메시지 출력  
  end; 
  while(cmcMxIsDone(BoardID, 2, @nNumChannel, @IsDone) <> ERR_NONE) do begin 
  // 여기서 IsDone 이 cmcTRUE 이면 Loop 를 탈출하면 됩니다. 
  … 
  end; 
  if(cmcErrGetLastCode() <> ERR_NONE) then begin 
  // 에러메시지 출력 
  end; 

SEE ALSO
```````````````

.. seealso:: :ref:`cmcMxWaitDone`